Enterprises have automated virtually every aspect of their businesses with software applications. A tremendous expense is incurred by these enterprises in support staff and in some cases development staff to maintain and develop these software applications.
Software is very difficult to definitively verify or certify before it is released into production as a product. This is because there are often many different branch points within a single application and the potential for virtually any kind of erroneous input data can occur during operation of the application. The difficulty becomes compounded when many applications are interfaced together to form a system of applications or a processing environment. In fact, often depending upon the size and complexity of an application it is mathematically impossible to verify that the application is error proof.
As a result, most if not all applications are released with latent errors that are only discovered during operation of those applications within disparate processing environments.
When an error is detected, a developer is usually consulted to resolve and fix the error. This process can be laborious and in many cases the process of finding the error can take much more time than fixing the error.
In a typical debugging scenario, a developer has the input data that generates the error, which is being analyzed by the developer. Usually, two approaches are used by the developer. The first is to insert break points into the software code of the application that is used by a debugging application to produce variable values for the developer to inspect as the input data works it way through the application being debugged. A second approach is for the developer to manually insert his/her own debugging code into the application that outputs a variety of information of interest to the developer when the input data works its way through the application.
Both of the above mentioned debugging approaches are largely trial and error approaches. They are both iterative approaches as well meaning that if the error is not located during one iteration additional break points or additional developer-inserted debugging statements are used by the developer until the error is found.
Accordingly, debugging remains an ad hoc technique where some existing market debuggers are used by developers in an effort to assist in the debugging process.
Thus, what are needed are improved techniques for debugging.